
section .data
msg db 'Hello, brave new world',0Ah

section .text
global _start

_start:
    ;strlen(msg)
    mov     eax,msg     ;字符串的首地址 放到了寄存器eax中
    call    strlen      ;调用函数，计算字符串的长度

    ;print
    mov     edx,eax     ;函数的结果在EAX中
    mov     ecx,msg 
    mov     ebx,1 
    mov     eax,4
    int     80h

    ;sys_exit(0)
    mov     ebx,0
    mov     eax,1
    int     80h

;函数
strlen:
    push    ebx         ;将调用前的环境 压栈 
    mov     ebx,eax     ;此时，EAX EBX中，都是字符串的首地址

nextchar:
    cmp     byte [eax],0
    jz      finished
    inc     eax
    jmp     nextchar

finished:
    sub     eax,ebx
    pop     ebx         ;还原调用前的环境
    ret;函数返回，返回值在eax中

; $ asm32 01_helloworld.asm 
; $ ./01_helloworld 
; Hello, brave new world

    